package com.javabi.common.lang;

import java.lang.management.MemoryUsage;
import java.lang.management.ThreadInfo;
import java.net.InetAddress;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface IVirtualMachine {

	long getProcessId();

	long getCurrentTime();

	int getCurrentTimeInSeconds();

	long getNanoTime();

	long getMaximumMemory();

	long getCommittedMemory();

	long getFreeMemory();

	long getUsedMemory();

	String getJavaVersion();

	InetAddress getLocalHost();

	String getHostName();

	String getHostAddress();

	String getOperatingSystem();

	String getUserName();

	String getTimeZone();

	String getFileEncoding();

	String getFileSeparator();

	String getPathSeparator();

	String getLineSeparator();

	String getClassPath();

	String getLibraryPath();

	List<String> getClassPathList();

	List<String> getLibraryPathList();

	List<String> getInputArguments();

	int getThreadCount();

	int getPeakThreadCount();

	Set<Thread> getThreads();

	Map<Thread, StackTraceElement[]> getStackTraces();

	ThreadInfo getThreadInfo(long id);

	long getStartTime();

	long getUptime();

	int getLoadedClassCount();

	MemoryUsage getHeapMemoryUsage();

	MemoryUsage getNonHeapMemoryUsage();

	Map<String, String> getEnvironmentProperties();

	Map<String, String> getSystemProperties();

	String getWorkingDirectory();

	int getCpuCount();

	void garbageCollect();

	void exit(int status);
}
